#include "Affichable.h"

Affichable::Affichable(SDL_Rect position , SDL_Surface *image , SDL_Surface *ecran){
    this->ecran = ecran;
    this->position = position;
    this->image = image;

    replacer();
}

Affichable::Affichable(SDL_Rect position , SDL_Surface *ecran){
    this->position = position;
    this->ecran = ecran;
    this->image = NULL;

    replacer();
}

Affichable::Affichable(SDL_Surface *image , SDL_Surface *ecran){
    this->position.x = 0;
    this->position.y = 0;
    this->ecran = ecran;
    this->image = image;

    SDL_SetColorKey(image, SDL_SRCCOLORKEY, SDL_MapRGB(image->format, 0, 0, 255));
}

 Affichable::Affichable(SDL_Surface *ecran){
    this->position.x = 0;
    this->position.y = 0;
    this->ecran = ecran;
    this->image = NULL;
 }

//permet d'afficher l'objet
void Affichable::afficher(){
    if(image != NULL)
        SDL_BlitSurface(image , NULL , ecran , &position);
}

//permet de savoir si l'objet est sorti de l'ecran
bool Affichable::doitDisparaitre(){
    return position.y > ecran->h;
}

//premet de decaler vers le bas l'objet
void Affichable::decaler(int nombre){
    position.y += nombre;
}

//retourne l'amplitude du cube dans une taille
Taille Affichable::getAmplitudeCube(){
    Taille t;
    t.h = 0;
    t.w = 0;

    if(image != NULL){
        t.h = image->h;
        t.w = image->w;
    }

    return t;
}

Taille Affichable::getTaille(){
    Taille t;
    t.h = 0;
    t.w = 0;

    if(image != NULL){
        t.h = image->h;
        t.w = image->w;
    }

    return t;
}

//pour changer l'image du cube
void Affichable::setImage(SDL_Surface *im){
    //if(image != NULL)
   //     SDL_FreeSurface(image);

    image = im;

    replacer();
}

void Affichable::replacer(){
    if(image != NULL){
        SDL_SetColorKey(image, SDL_SRCCOLORKEY, SDL_MapRGB(image->format, 0, 0, 255));
         //si l'objet depasse de l'ecran on le replace
        if(position.x + image->w > ecran->w)
            this->position.x = ecran->w - image->w - 10;
    }

}

SDL_Rect Affichable::getPosition(){
    return position;
}

SDL_Rect Affichable::getPositionIni(){
    return position;
}

 void Affichable::setPosition(SDL_Rect position){
    this->position = position;
 }


int Affichable::compareTo(void *v1 , void *v2){
    Affichable* a1 = (Affichable*)v1;
    Affichable* a2 = (Affichable*)v2;

    int posMina1 = a1->getPositionIni().y + a1->getAmplitudeCube().h;
    int posMina2 = a2->getPositionIni().y + a2->getAmplitudeCube().h;

    return posMina2-posMina1;
}
